package visitor_pattern;

import java.util.ArrayList;

/**
 * @author 申书航
 * @version 1.0
 * 订单类，实现了可访问接口，用于存储和管理订单项。
 */
public class Order implements IVisitable {

    private String id;

    private final ArrayList<Item> items;

    /**
     * 构造函数，初始化订单编号和订单项列表。
     * @param id 订单编号
     */
    public Order(String id) {
        this.id = id;
        this.items = new ArrayList<>();
    }

    @Override
    /**
     * 接受访问者，执行访问操作。
     * @param visitor 访问者实例
     */
    public void accept(IVisitor visitor) {
        visitor.visit(this);
        items.forEach(item -> item.accept(visitor));
    }

    /**
     * 添加订单项到订单中。
     * @param item 要添加的订单项
     * @return 返回当前订单对象
     */
    public Order addItem(Item item) {
        items.add(item);
        return this;
    }

    /**
     * 显示订单信息，包括订单编号和订单项的名称、数量和小计。
     */
    public void showInfo() {
        System.out.println("订单编号：" + id);
        System.out.println("名称 \t数量 \t小计");
    }
}
